// 专门处理权限路由的模块
// 静态路由
import { constantRoutes, asyncRoutes } from '@/router'
// asyncRoutes 所有的静态路由

const state = {
  // 一开始 肯定拥有
  routes: constantRoutes // 路由表， 标识当前用户拥有的路由的数组
}
const mutations = {
  // 定义修改routes的mutation
  // payload 是我们登录成功需要添加的路由
  setRoutes(state, payload) {
    /*
      state.routes = [...state.routes, ...payload]
      这样写会有业务逻辑的错误   登录管理员后 权限会被更新   当用户退出时
      再次使用其他用户登录的时候 由于未清除管理员的权限  权限会在管理员的权限上新增新角色的权限
    */
    state.routes = [...constantRoutes, ...payload] // 每次都在静态路由的基础上添加
  }
}
const actions = {
  // 筛选权限路由
  filterRoutes(ctx, menus) {
    const routes = []
    // 筛选出 动态路由中与menus中能狗对上的路由
    menus.forEach(item => {
      routes.push(...asyncRoutes.filter(obj => obj.name === item)) // 得到一个数组 有可能有元素或者空数组)
      // 得到的是routes是所有权限中满足权限要求的路由的数据  也就是当前当前用户所拥有的动态路由的权限。
    })
    ctx.commit('setRoutes', routes)
    // 上面的state是给左侧导航用的  return routes是给addRoutes用的
    return routes
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
